package com.msi.algorithm;

import java.util.ArrayList;
import java.util.List;

/**
 * Drzewo stanów algorytmu CSP
 * @author Michał Kołodziejski
 */
public class StatesTree {

    /**
     * Stan początkowy
     */
    protected State initialState;
    
    /**
     * Lista węzłów drzewa, które są do rozpatrzenia (mogą mieć kolejne stany-potomki)
     */
    protected List<State> partialStates;
    
    
    /**
     * Tworzy nowe drzewo stanów
     * @param initialState stan początkowy
     */
    public StatesTree(State initialState) {
        this.initialState = initialState;
        this.partialStates = new ArrayList<State>();
        
        this.partialStates.add(initialState);
    }
    
    
    /**
     * Zwraca listę stanów częściowych
     * @return lista stanów
     */
    public List<State> getPartialStatesCopy(){
        List<State> copy = new ArrayList<State>(partialStates);
        return copy;
    }
    
    /**
     * Usuwa stan z listy stanów częściowych
     * @param stateToRemove stan do usunięcia z listy
     */
    public void removePartialState(State stateToRemove){
        partialStates.remove(stateToRemove);
    }
    
    /**
     * Dodaje stan do listy stanów częściowych
     * @param stateToAdd stan do dodania
     */
    public void addPartialState(State stateToAdd){
        partialStates.add(0, stateToAdd);
    }
}
